/**
 * 
 */
package proy4sistdistribuidos.serviciosweb.cliente.localizacion;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

/**
 * @author Carlos Diaz Maya, Juan Felipe Garcia
 *
 */
public class ClienteSWLocalizacion {
	
	private String urlWS="http://157.253.202.169:8080/AplicacionUbicacion/AplicacionUbicacionWSService";
	private String nombreNamespace = "http://aplicacionUbicacionWS.uniandes.co/";
	private static ClienteSWLocalizacion solitario;

	/**
	 * COnstructor para el Servicio Web
	 */
	private ClienteSWLocalizacion() {
		
	}
	
	public static ClienteSWLocalizacion obtenerSolitario() {
		if(solitario==null){
			solitario = new ClienteSWLocalizacion();
		}
		return solitario;			
	}
	
	public String obtenerUbicacionCliente(String ip) throws Exception {
		//Fuente codigo original: http://programa-con-google.blogspot.com/2010/12/android-como-consumir-un-servicio-web.html
		//Adaptado al uso de este proyecto
		try {
			String nombreMetodo = "darUbicacionUsuario";
			String accionSoap = "http://aplicacionUbicacionWS.uniandes.co/darUbicacionUsuario";
			//Modelo el request
			SoapObject request = new SoapObject(nombreNamespace, nombreMetodo);
			
			//Se pasa el parametro
			request.addProperty("ip", ip);


			//Se modela el sobre
			SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			sobre.dotNet = false;
			sobre.env = SoapSerializationEnvelope.ENV;
			sobre.enc = SoapSerializationEnvelope.ENC;
			sobre.setOutputSoapObject(request);

			//Se modela el transporte
			HttpTransportSE transporte = new HttpTransportSE(urlWS);
			transporte.debug = true;
			
			try {
				//Se llama el servicio
				transporte.call(accionSoap, sobre);
			} catch (Exception e) {
				System.out.println(transporte.requestDump);
				throw e;
			}

			//Se obtiene el resultado
			SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();

			//Se retorna el resultado
			return resultado.toString();
		} 
		catch (Exception e) {
			throw new Exception("Error al invocar el servicio web de localización.", e);
		}

	}
	
	//Esto es para probar en java por separado
	/*public static void main (String[] args) {
		ClienteSWLocalizacion cliente = new ClienteSWLocalizacion();
		try {
			String resultado = cliente.obtenerUbicacionCliente("192.168.3.211");
			System.out.println(resultado);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}*/


}
